﻿using System;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using System.Collections.Generic;
using System.ComponentModel;

namespace Sinacor.Servico.Bovespa.Movimento.Service.ServiceImplementation
{
    [SinacorServiceBehavior]
    public class ControleMovimentoOrdens : ServiceContract.IControleMovimentoOrdens
    {
        #region IControleMovimentoOrdens Members

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public Sinacor.Servico.Bovespa.Movimento.Service.DataContract.Response.DataMovimentoResponse AbrirMovimento()
        {
            BusinessLogic.ControleMovimentoOrdens controleMovimentoOrdens = new BusinessLogic.ControleMovimentoOrdens();
            return Translator.BusinessEntityToDataContract.ControleMovimentoOrdens.ToDataMovimentoResponse(controleMovimentoOrdens.AbrirMovimento());
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public Sinacor.Servico.Bovespa.Movimento.Service.DataContract.Response.DataMovimentoResponse CalcularDataAberturaMovimento()
        {
            BusinessLogic.ControleMovimentoOrdens controleMovimentoOrdens = new BusinessLogic.ControleMovimentoOrdens();
            return Translator.BusinessEntityToDataContract.ControleMovimentoOrdens.ToDataMovimentoResponse(controleMovimentoOrdens.CalcularDataAberturaMovimento());            
        }

        /// <summary>
        /// 
        /// </summary>
        public void ConsolidarMovimento()
        {            
            new BusinessLogic.ControleMovimentoOrdens().ConsolidarMovimento();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        public void FecharMovimento(Sinacor.Servico.Bovespa.Movimento.Service.DataContract.Request.DadosFechaMovimentoRequest request)
        {
            BusinessLogic.ControleMovimentoOrdens controleMovimentoOrdens = new BusinessLogic.ControleMovimentoOrdens();
            controleMovimentoOrdens.FecharMovimento(Translator.DataContractToBusinessEntity.ControleMovimentoOrdens.ToDadosFechaMovimento(request));
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public Sinacor.Servico.Bovespa.Movimento.Service.DataContract.Response.EstadoMovimentoResponse ObterEstadoMovimento()
        {
            BusinessLogic.ControleMovimentoOrdens controleMovimentoOrdens = new BusinessLogic.ControleMovimentoOrdens();
            return Translator.BusinessEntityToDataContract.ControleMovimentoOrdens.ToEstadoMovimentoResponse(controleMovimentoOrdens.ObterEstadoMovimento());
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public Sinacor.Servico.Bovespa.Movimento.Service.DataContract.Response.InformacoesMovimentoResponse ObterInformacoesMovimento(Sinacor.Servico.Bovespa.Movimento.Service.DataContract.Request.DataMovimentoRequest request)
        {
            BusinessLogic.ControleMovimentoOrdens controleMovimentoOrdens = new BusinessLogic.ControleMovimentoOrdens();
            return Translator.BusinessEntityToDataContract.ControleMovimentoOrdens.ToInformacoesMovimentoResponse(controleMovimentoOrdens.ObterInformacoesMovimento(Translator.DataContractToBusinessEntity.ControleMovimentoOrdens.ToDataMovimento(request)));
        }

        /// <summary>
        /// 
        /// </summary>
        public void ReabrirMovimento()
        {
            new BusinessLogic.ControleMovimentoOrdens().ReabrirMovimento();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public Sinacor.Servico.Bovespa.Movimento.Service.DataContract.Response.ResultadoSimulacaoResponse SimularFechamentoMovimento(Sinacor.Servico.Bovespa.Movimento.Service.DataContract.Request.DataMovimentoRequest request)
        {
            BusinessLogic.ControleMovimentoOrdens controleMovimentoOrdens = new BusinessLogic.ControleMovimentoOrdens();
            return Translator.BusinessEntityToDataContract.ControleMovimentoOrdens.ToResultadoSimulacaoResponse(controleMovimentoOrdens.SimularFechamentoMovimento(Translator.DataContractToBusinessEntity.ControleMovimentoOrdens.ToDataMovimento(request)));
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public Sinacor.Servico.Bovespa.Movimento.Service.DataContract.Response.ResultadoResponse VerificarAlertasFechamento(Sinacor.Servico.Bovespa.Movimento.Service.DataContract.Request.DataMovimentoRequest request)
        {
            BusinessLogic.ControleMovimentoOrdens controleMovimentoOrdens = new BusinessLogic.ControleMovimentoOrdens();
            return Translator.BusinessEntityToDataContract.ControleMovimentoOrdens.ToResultadoResponse(controleMovimentoOrdens.VerificarAlertasFechamento(Translator.DataContractToBusinessEntity.ControleMovimentoOrdens.ToDataMovimento(request)));
        }

        public void RemontarCalendario()
        {
            BusinessLogic.ControleMovimentoOrdens controleMovimentoOrdens = new BusinessLogic.ControleMovimentoOrdens();
            controleMovimentoOrdens.RemontarCalendario();
        }

        #endregion
    }
}
